iT邦幫忙

2022 iThome 鐵人賽

DAY 1
0
Software Development

《今天也走在開發遊戲引擎的路上》系列 第 1

「千里之行,始於足下」—— 啟程的第一步

  • 分享至 

  • xImage
  •  

淺談「遊戲引擎」

既然我們要談遊戲開發,不免俗的還是要先來定義一些名詞 — 何謂遊戲 ? 我們可以在各類書籍、各種網站上找出各式各樣的答案,不外乎是「具有特定行為模式」、「具體規則以及條件」、「擁有娛樂身心的作用」 抑或是「爭奪輸贏勝負」...等等。但...這些定義卻顯得有些艱澀、抽象。筆者認為,「遊戲」便是某一種行為的呈現、一種形式,猶如文學、繪畫、音樂...等等。在充實觀賞者的內心或是精神層面上,我們完全可以說遊戲便是一種藝術的體現。

  • 「遊戲」是一種行為的呈現、也是一種藝術的形式 (圖/thatgamecompany - 《風之旅人》)

在此之上,遊戲與常見的藝術欣賞單向的傳遞互動有所差異。「玩家」有別於「讀者」、「觀眾」抑或是「聽眾」,「玩家」們實際上進入了遊戲的世界中,感知、並且做出回饋於遊戲世界。因此,遊戲開發自然也並不是件簡單的事情。

而衍生出的,便是「遊戲引擎」這個概念。在電子遊戲發展早期(約1970年代始),一款遊戲的開發基本為費時費力的從零開始架構。然而,遊戲中核心軟體組件是可以重複利用的。也因此,在1990年代中期的遊戲軟體的架構變有了轉變。工程師們將架構清楚的劃分,3D渲染系統、碰撞檢測系統、音頻系統、資產(Asset)的處裡、遊戲世界等等... 這麼做好處是什麼呢? 若有一個開發者取得該遊戲的授權,那麼他只需要引入新的資產(美術、角色、關卡)抑或是遊戲不同的規則,對該核心做極少的修改,就能夠包裝成一個新的產品。雖然在當時這種作法仍然會需要額外的工作在核心軟體工程上(用於包裝成新的遊戲),但比起重新的開發核心軟體組件來的實惠多了。

在這裡,我們可以對「遊戲引擎」做一個小小的歸納。

  • 「遊戲引擎」是由「遊戲開發」衍生出來的概念,藉由提供可重複使用的軟體組件,提高遊戲開發人員的「創作」效率。

  • 狹義上的遊戲引擎僅是由各種核心軟體組件架構而成,我們所常見的Uinty、Unreal引擎中的編輯器、場景管理等等... 並非必要功能 (圖/Epic Games - Unreal Engine)

學習的「路線規劃」

到這裡,我們對於「遊戲引擎」先有了概念上的認識,緊接著就進入今天的重點吧。預先安排、規劃,是做一件事前的正確態度,亦是筆者所堅持。而遊戲引擎是一門集成各種資訊領域的「學問」,在踏上這條路之前,筆者想先簡單的簡述未來《今天也走在開發遊戲引擎的路上》該系列所安排的內容。

首先,《今天也走在開發遊戲引擎的路上》這系列的目標是透過整理、學習網路上的資源來實現一個自開發的小型遊戲引擎。不過在進入實作環節前我們還是得循序漸進的從理論開始。而在遊戲引擎的理論中,毫無疑問的《Game Engine Architecture》是這方面的翹楚。因此在章節上的安排我也借鑒了該書的編排,如下。

  • 遊戲引擎架構簡述
  • 遊戲系統組件 (一) (低階引擎系統)
  • 遊戲系統組件 (二) (渲染、動畫、物理系統)
  • 遊戲系統組件 (三) (遊戲性基礎系統)

筆者大致上會使用大約幾篇左右的篇幅來整理這些基礎概念。首先便是架構的簡述,遊戲引擎是一個大型軟體系統,在《遊戲引擎架構簡述》時我們會先認識這個架構以及簡介遊戲系統的組件。而接下來的將會再個別深入的認識不同的系統組件,或許有些人在這裡注意到了,明明在《遊戲引擎架構簡述》的部分我們已經簡介了遊戲系統的組件,那又為什麼要重複的再次介紹呢? 這就要說到,一般來說根據軟體層建構的軟體,應該避免造成系統間的耦合。但是舉遊戲引擎為例,渲染、動畫、物理是三種不同的系統,但在引擎架構中他們卻有著密不可分的關係。因此在安排上,筆者並非將理論內容順序的介紹,更像是一種先快速的第一次掃視大綱後,再進行第二次的學習!而實際上,在接下來的實作環節中,在動手實現一個組件、功能時無可避免地會進行第三次複習呢!

  • 專案的建立及管理

而在接下來便是專案的建立與管理,在這個章節中我會介紹在這個系列裡實作時我們將會使用的一些工具。開發環境將會使用Visual Studio 2022,並且使用CMake作為管理專案建置的工具,而引擎的開發將會使用C++ 17來編寫,並且整合python作為撰寫遊戲邏輯腳本的語言。筆者預計使用1、2篇的篇幅來整理這部分的文章。

  • 實作環節
  • 科普文章

最後也是大多數的時間,筆者預計都將留給實作環節,或許這也是多數想看文章的讀者最感興趣的吧。在自學過程中,多數的教學大致上都是理論、科普,這並非沒有原因的,開發遊戲引擎是一個偌大的目標,將實作塞在中短期的教學時間中似乎是個意想天開的想法。可以參考The Cherno - GAME ENGINE series,該名工程師可是花了接近一兩年的時間持續更新開發遊戲引擎的紀錄呢!也因此,實作環節上面將會更趨近於介紹一個組件該完成的功能與特色,接著利用現成的函式庫來實現該功能、並且整合進去我們的小專案。鮮少會有從頭開始手刻的情況發生,舉個例子來說,在平台層中的架構,我們將會實現並創建一個跨平台窗口,但筆者不希望花上許多時間去實現各平台的視窗如 win32、xcb windows...,在專案建置中還要花心力去注意平台差異等等。更希望的是講解完平台層中這概念時,再利用glfw或是sdl2這種跨平台的開發工具函式庫來實現這方面的功能並且整合到我們的專案中。我也將盡力使內容完整並且完滿的收尾,因此即便超過30天筆者也會把文章補齊的!但或許沒辦法日更就是了 ( <(_ _)> 總之先鞠躬道歉再說 )。而在鐵人賽期間中難免會有文章趕不出來的情況,為此筆者也會準備幾篇遊戲開發方面的科普文章來以備不時之需。在那種時候還請見諒,而若是能對筆者小小聲地說聲「加油」那便感激不盡了!


關於筆者

逢甲大學資工系三年級學生,同時也現任學校「遊戲開發社」社長。在遊戲開發領域上僅有初步的認識,或許是少年時潛藏在內心的「遊戲開發」魂,筆者踏上了研究遊戲引擎的道路上。這一系列文章作為在研究時中做的筆記集合、也作為一個開發過程的紀錄。也因此,內容上或許無法提供出高深的業界趨勢分析、或是高超的技術指導等等...但筆者會盡其所能的將所學有條理的、有系統的呈現出來。也誠摯的歡迎各位讀者,在未來的連載期間可以盡情的交流、分享意見,讓我們一同結伴走在開發遊戲引擎的道路上吧 :>


參考資源

這裡也放上筆者學習的資源,歡迎大家看看!


後記

...orz,原本想說要預先屯稿,結果一個月只寫了三四篇(X
先幫自己上香,我會盡力完成它的 :> !


下一篇
「深其根、固其柢」 —— 從架構開始扎穩基礎
系列文
《今天也走在開發遊戲引擎的路上》12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言